import java.util.Arrays;

public class MyArrayList {
    private int[] elem;
    private int usedSize;
    //构造函数
    public MyArrayList(){
        this.elem=new int[4];
        this.usedSize=0;
    }
    //打印顺序表
    public void display(){
        if(isEmpty()){
            System.out.println("顺序表为空");
            return;
        }
        for (int i = 0; i < this.usedSize; i++) {
            System.out.print(this.elem[i]+" ");
        }
        System.out.println();
    }
    //获取有效数据元素个数
    public int getNum(){
        return this.usedSize;
    }
    //判断顺序表是否满
    public boolean isFull(){
        return this.usedSize==this.elem.length;
    }
    //扩容
    public int[] enlarge(){
        int []ret= Arrays.copyOf(this.elem, this.elem.length*2);
        return ret;
    }
    //在pos位置插入元素
    public void insert(int pos,int data){
        if(pos<0||pos>this.usedSize){
            System.out.println("输入的位置不在正确范围");
            return;
        }
        boolean ret=isFull();//满了
        if(ret){
            this.elem=enlarge();//扩容
        }
        for (int i = this.usedSize-1; i >=pos ; i--) {
            this.elem[i+1]=this.elem[i];
        }
        this.elem[pos]=data;
        this.usedSize++;
    }
    //判断顺序表是否为空
    public boolean isEmpty(){
        if(this.usedSize==0){
            return true;
        }
        return false;
    }
    //判断顺序表是否包含某个元素
    public boolean contain(int data){
        if(isEmpty()){//为空
            return false;
        }
        for (int i = 0; i < this.usedSize; i++) {
            if(this.elem[i]==data){
                return true;
            }
        }
        return false;
    }
    //返回某个元素的下标
    public int search(int data){
        if(isEmpty()){//为空
            return -1;
        }
        for (int i = 0; i < this.usedSize; i++) {
            if(this.elem[i]==data){
                return i;
            }
        }
        return -1;
    }
    //得到某个位置的值
    public int getValue(int pos){
        if(pos<0||pos>=this.usedSize){
            System.out.println("输入位置不在正确范围内");
            return -1;//业务上的处理,后期可以抛异常
        }
        else {
            return this.elem[pos];
        }
    }
    //pos位置设置为data
    public void set(int pos,int data){
        if(pos<0||pos>=this.usedSize){
            System.out.println("输入位置不在正确范围内");
            return ;
        }
        this.elem[pos]=data;
    }
    //删除某个数据
    public void delete(int data){
        if(isEmpty()){
            System.out.println("顺序表为空");
            return;
        }
        int pos=search(data);
        if(pos==-1){
            System.out.println("未找到该数据");
            return;
        }
        for (int i = pos+1; i <this.usedSize ; i++) {
            this.elem[i-1]=this.elem[i];
        }
        this.usedSize--;
    }
    //删除顺序表
    public void clear(){
        this.elem=null;
        this.usedSize=0;
    }
    public int[] getElem() {
        return elem;
    }

    public void setElem(int[] elem) {
        this.elem = elem;
    }

    public int getUsedSize() {
        return usedSize;
    }

    public void setUsedSize(int usedSize) {
        this.usedSize = usedSize;
    }
}
